package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
)

func main() {
	si := make(chan os.Signal, 1)
	//hangup 终端关闭时，该信号被发送到session首进程以及作为job提交的进程（即用 & 符号提交的进程）
	//quit 和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
	//terminated 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出，shell命令kill缺省产生这个信号。如果进程终止不了，我们才会尝试SIGKILL。
	//interrupt 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出，用于通知前台进程组终止进程
	signal.Notify(si, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
	for {
		c := <-si
		switch c {
		case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
			fmt.Println(c)
			return
		case syscall.SIGHUP:
		default:
			return
		}
	}
}
